
namespace cplusplus_primer {
    // 第一个嵌套的命名空间：定义了库的 Query 部分
    namespace QueryLib {
        class Query { /* ... */ };
        Query operator&(const Query&, const Query&)
            { /* ... */ }
        // ...
    }
    // 第二个嵌套的命名空间：定义了库的 Sales_data 部分
    namespace Bookstore {
        class Quote { /* ... */ };
        class Disc_quote : public Quote { /* ... */ };
        // ...
    }

    // 内联命名空间（空间中的名字可以被外层命名空间直接使用）
    inline namespace FifthEd {
        // 本书第 5 版代码
    }
    // 后续再打开该命名空间时，就不需要写 inline，默认就是内联的
    namespace FifthEd {
        class Query_base { /* ... */ };
    }

    namespace FourthEd {
        // 本书第 4 版代码
        class Query_base { /* ... */ };
    }
}

/**
 * 未命名的命名空间
 * 空间中的定义相当于是静态的，仅在当前文件内部有效
 */
int i;
namespace {
    // int i;   // 错误：二义性
}

namespace local {
    namespace {
        int i;  // 正确：与全局作用域中的 i 不同
    }
}

int main()
{
    // 访问嵌套的命名空间的作用域
    cplusplus_primer::QueryLib::Query q;

    // 访问嵌套的内联命名空间的作用域（默认使用第 5 版代码）
    cplusplus_primer::Query_base qb;
    // 使用早期第 4 版代码
    cplusplus_primer::FourthEd::Query_base qb2;

    // 访问全局作用域
    ::i = 10;
    // 访问 local 作用域
    local::i = 42;
}